import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Product } from 'src/types/product.interface';

@Injectable()
export class ProductService {
 //构造函数，通过InjectModel这个参数装饰器注入Banner模型
 constructor(@InjectModel('Product') private productModel: Model<Product>) {

 }
 async find(query): Promise<Product[]> {
     return this.productModel.find(query).exec();
 }
 async create(createProductDTO:Product|Product[]):Promise<Product|Product[]> {
     if(Array.isArray(createProductDTO)){
         return this.productModel.insertMany(createProductDTO)
     }else{
         return new this.productModel(createProductDTO).save()
     }
 }
 async findPremiumProducts():Promise<Product[]>{
        return this.productModel.find({isPremium:true,isActive:true}).sort({createdAt:-1}).limit(6).exec();;
 }
 async findRecomended(page:number,limit:number):Promise<Product[]>{
    const skip = (page-1)*limit;
    return this.productModel.find({isRecommended:true})
    .sort({createdAt:-1})//按创建时间倒序排列
    .skip(skip)//跳过指定的条数
    .limit(limit)//限制返回的条数
    .exec()
 }

 async findById(id:string):Promise<Product>{
    //.findById默认并不查询虚拟属性，如果要查询虚拟属性需要使用populate进行指定查询
   return this.productModel.findById(id).populate({
    path:'productImages',//字段名
    match:{isActive:true} //查询 的条件
   }).exec();
 }
}
